import bs4
import peewee as pw

from awesomest_spider import glb


class Dy2018(glb.Model):
    name = pw.CharField(primary_key=True)
    url = pw.CharField()


def parse_data(html):
    """
    功能：提取 html 页面信息中的关键信息，并整合一个数组并返回
    参数：html 根据 url 获取到的网页内容
    返回：存储有 html 中提取出的关键信息的数组
    """
    bsobj = bs4.BeautifulSoup(html, 'html.parser')

    # 获取电影列表
    tbList = bsobj.find_all('table', attrs={'class': 'tbspan'})
    # 对电影列表中的每一部电影单独处理
    for item in tbList:
        link = item.b.find_all('a')[1]
        # 获取电影的名称
        name = link["title"]
        # 获取详情页面的 url
        url = f"https://www.dy2018.com{link['href']}"
        # 将此电影的信息加入到电影列表中
        Dy2018.replace(
            name=name,
            url=url,
        ).execute()
        yield name, url


def main():
    # 循环爬取多页数据
    # 根据之前分析的 URL 的组成结构，构造新的 url
    # 依次调用网络请求函数，网页解析函数，数据存储函数，爬取并保存该页数据
    response = glb.client.send_request('get', url='https://www.dy2018.com/0/index.html')
    html = response.content.decode('gb2312', errors='replace')
    return parse_data(html)


main()
